
import random
import pymysql
from faker import Faker
from config import Config  # 假设配置文件包含了数据库连接信息

# 初始化 Faker 实例
fake = Faker()

print("脚本正在执行...")

print("正在连接数据库.......")
# 连接 MySQL 数据库（使用 pymysql）
try:
    conn = pymysql.connect(
        host=Config.MYSQL_HOST,           # 从配置文件中获取数据库主机地址
        user=Config.MYSQL_USER,           # 从配置文件中获取数据库用户名
        password=Config.MYSQL_PASSWORD,   # 从配置文件中获取数据库密码
        database=Config.MYSQL_DB,         # 从配置文件中获取数据库名
        autocommit=True                   # 启用自动提交（如果你希望每次操作时自动提交）
    )
    print("连接完毕")
    cursor = conn.cursor()

except pymysql.MySQLError as e:
    print(f"连接 MySQL 数据库时出错: {e}")
    raise  # 发生异常时抛出错误

# 获取用户和商品数据
def get_users_and_products():
    cursor.execute("SELECT username FROM litemall_user")
    users = cursor.fetchall()  # 获取所有用户
    cursor.execute("SELECT goods_sn FROM litemall_goods")
    products = cursor.fetchall()  # 获取所有商品
    return users, products

# 生成随机购买记录
def generate_random_purchase(users, products):
    random_user = random.choice(users)  # 随机选择一个用户
    random_product = random.choice(products)  # 随机选择一个商品

    return {
        "username": random_user[0],
        "goods_sn": random_product[0],
    }

# 插入购买记录到数据库
def insert_purchase_record(litemall_records):
    sql = """
        INSERT INTO litemall_records (username, goods_sn)
        VALUES (%s, %s)
    """
    values = (
        litemall_records["username"],
        litemall_records["goods_sn"],
    )
    cursor.execute(sql, values)

# 主程序
def generate_purchases():
    try:
        users, products = get_users_and_products()

        # 随机生成 1000 条购买记录
        for _ in range(1000):
            litemall_records = generate_random_purchase(users, products)
            insert_purchase_record(litemall_records)
            print(f"生成购买记录: 用户名{litemall_records['username']}, 商品编号{litemall_records['goods_sn']}")

        print("购买记录生成完成！")
    except Exception as e:
        print(f"生成购买记录时出错: {e}")
    finally:
        # 提交事务
        conn.commit()
        # 关闭游标和连接
        cursor.close()
        conn.close()

# 调用生成函数
generate_purchases()
